/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package services;

import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;

import model.*;
import DAO.*;
import java.sql.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Todos web services relativos a Pagamento
 * Esse serviço é provido pela operadora de cartões de crédito.
 * 
 * @author arruda
 */
@WebService(serviceName = "PagamentoWS")
public class PagamentoWS {

    /**
    * Processa um pagamento dado a entrada:
        * Nome do cliente
        * CPF
        * Número do pedido
        * Número do cartão de crédito
        * Código
        * Nome escrito no cartão
        * Validade
        * Valor
     * com saida:
        * Número da nota fiscal ou nulo (no caso de pagamento não realizado)
        * 
     */
    @WebMethod(operationName = "processar")
    public Integer processar(
            @WebParam(name = "nomeCliente") String nomeCliente,
            @WebParam(name = "cpf") String cpf,
            @WebParam(name = "numPedido") Integer numPedido,
            @WebParam(name = "numCartao") String numCartao,
            @WebParam(name = "codigoCartao") Integer codigoCartao,
            @WebParam(name = "nomeCartao") String nomeCartao,
            @WebParam(name = "validadeCartao") String validadeCartao,
            @WebParam(name = "valor") Double valor) {

            Integer numNotaFiscal = null;
            Pagamento pagamento = null;
            Cliente cliente = null;
            Pedido pedido = null;
        
            ClienteDAO clienteDAO = new ClienteDAO();
            PagamentoRegistradoDAO pagamentoRegDAO = new PagamentoRegistradoDAO();
            PedidoDAO pedidoDAO = new PedidoDAO();
            PagamentoDAO pagamentoDAO = new PagamentoDAO();
            
            try {            
                cliente = clienteDAO.filtrarCliente(cpf).get(0);
                pedido = pedidoDAO.filtrarPedido(numPedido).get(0);
                pagamento = pagamentoDAO.filtrarPagamento(numPedido).get(0);
                
                java.util.Date date = new java.util.Date();

                java.sql.Date dataCriacao = new java.sql.Date( date.getTime() );
                pagamentoRegDAO.SalvaPagamentoRegistrado(new PagamentoRegistrado(numPedido, numNotaFiscal=numPedido*3, dataCriacao));
 
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            
        
        return numNotaFiscal;
    }
    
    
    
    //TODO: Fazer isso usando models e nao milhares de parametros
    // ideal era cada model ter seu proprio validador e simplesmente chamar cada
    //validador de cada model.
    private Boolean validarDados(Pagamento pagamento) {
        if(pagamento.validar()){
            return true;
        }
        return false;
    }
}
